﻿
global times;
times=1;
global epochtime;
epochtime=0;
global results;
global train;
load train_idm300.mat;
%train_idm300.mat各列数据含义
%1-车辆ID 2-时间（帧ID） 3-速度(m/s) 4-加速度(m/s2) 5-车长(m) 6-横向坐标 7-纵向坐标 8-车道编号
%9-前车车长 10-前车距离 11-前车速度 12-前车速度差=前车-本车 13-前车ID 14-前车很坐标 15-前车纵坐标 16-前车加速度

%% 对同一辆车的连续轨迹进行标记
ijk=1;
for i=1:length(trainx(:,1))-1
    if (trainx(i,1)==trainx(i+1,1) & trainx(i,2)==trainx(i+1,2)-1)
        trainx(i,17)=ijk;
    else ijk=ijk+1;
    end
end

 %% 模型标定
 results=zeros(ijk,7);
%五个标定参数的范围：1-最大加速度 2-舒适减速度 3-期望速度 4-安全时距 5-停车距离
lb=[0.1 0.1 14.0 0.1 1.0];  %变量下边界
ub=[8.0 8.0 40  4.0 5.0];  %变量上边界
initialPopulationMatrix = [4.66 1.88 31.64 1.56 1.90];%初始搜索值

for i=1:ijk
    disp([num2str(i) '/' num2str(ijk)]);
    train=trainx(find(trainx(:,17)==i),:);%对同一辆车的连续轨迹进行标定
    if  (length(train(:,1))<30) continue; %只选跟驰持续时间大于3s的数据
    else
        %GA参数设置
        options = gaoptimset('PlotFcns',{@gaplotbestf,@gaplotscores},'generation', 500, 'InitialPopulation',initialPopulationMatrix,'PopulationSize',20);
        results(i,1)=i;
        [results(i,2:6),results(i,7)]=ga(@mainfun_IDM,5,[],[],[],[],lb,ub,[],options);%GA标定
    end
end

%% 结果统计
resultIDM=results(find(results(:,2)>0&results(:,7)<0.2),:);
meanIDM=mean(resultIDM(:,[2:6]));
stdIDM=std(resultIDM(:,[2:6]));